perm filename IMPJOE.OLD[SS,SYS] blob sn#345685 filedate 1972-05-16 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE ITEST
C00003 00003	 Cono Bits . . .
C00005 00004	mpln←pln←←20
C00009 00005	illans:	pushj p,rdlf
C00012 ENDMK
C⊗;
TITLE ITEST

IMP←←400
; Cono Bits . . .

test←←100000		; Enter test mode (does anal-cranial inversion)
strin←←040000		; Start input, sets stop, clears input end
i32←←020000		; Set input byte size to 32b if IDPIEN set
o32←←010000		; Set output byte size to 32b if ODPIEN set
clrst←←004000		; Clear stop after input bit
clrwt←←002000		; Clear waiting to input bit
strout←←000200		; Start output
fino←←000100		; Finish output (last bit has been sent)
iepien←←000040		; Enable change of input end interrupt channel
idpien←←000020		; Enable change of input byte size and input done interrupt channel
odpien←←000010		; Enable change of output byte size and output done interrupt channel


; Coni bits . . .

test←←100000		; Enter test mode (does anal-cranial inversion)
imperr←←040000		; Imp error
idone←←020000		; Input done
iend←←010000		; Input end.
odone←←004000		; Output done
mpln←pln←←20
p←←17
array pdl[pln],mpdl[mpln],messag[300]
integer savep,cnt,savcni

START:	calli
	movei 1,spwst
	movem 1,spwdsp
; put in initialize code here
	move 1,[xwd 400004,spw]
	call 1,[sixbit /SPCWGO/]
	jrst main

spw:	skipn rst
	jrst @spwdsp
	move p,[iowd pln,pdl]
	setzm rst
	jrst owd

spwdsp:	0

zwait:	movei 1,zdsp
	jrst dsmg

zdsp:	move p,savep
	move 1,@(p)
	skipe (1)
	jrst dsm
	jrst cpopj1

nzwait:	movei 1,ndsp
	jrst dsmg

ndsp:	move p,savep
	move 1,@(p)
	skipn (1)
	jrst dsm
	jrst cpopj1

fwait:	movei 1,fdsp
	jrst dsmg

fdsp:	move p,savep
	coni imp,savcni
	move 1,@(p)
	conso imp,(1)
	jrst dsm
	jrst cpopj1


bwait:	movei 1,100
	movem 1,cnt
	movei 1,bdsp
dsmg:	movem 1,spwdsp
	movem p,savep
	jrst dsm

bdsp:	move p,savep
	move 1,@(p)
	conso imp,(1)
	jrst count
	aos (p)
cpopj1:	aos (p)
	popj p,

count:	sosle cnt
dsm:	call [sixbit /DISMIS/]
	coni imp,savcni
	aos (p)
	move 1,@(p)
	sos (1)
spwst:	move p,[iowd pln,pdl]
	movei 1,3
	movem 1,nopcnt#
noplop:	cono imp,strout!o32!odpien
	datao imp,[4B7]
	pushj p,fwait
	odone

	cono imp,fino
	pushj p,fwait
	odone

	sosle nopcnt
	jrst noplop

	setzm blkip#
owd:	cono imp,strout!strin!i32!o32!clrst!clrwt!idpien!iepien!odpien
	cono imp,clrst!clrwt
	aos ntimes#
	setzm now#
	datao imp,[13B15]
owd1:	pushj p,fwait
	odone!idone!iend

	consz imp,idone!iend
	pushj p,inpsom
	conso imp,odone
	jrst owd1

	datao imp,[707777777777]
owd2:	pushj p,fwait
	odone!idone!iend

	consz imp,idone!iend
	pushj p,inpsom
	conso imp,odone
	jrst owd2

	datao imp,[070000000000]
owd4:	pushj p,fwait
	odone!idone!iend

	consz imp,idone!iend
	pushj p,inpsom
	conso imp,odone
	jrst owd4

cno1:	cono imp,fino
owd3:	pushj p,fwait
	odone!idone!iend

	consz imp,idone!iend
	pushj p,inpsom
	conso imp,odone
	jrst owd3

ilp:	skipe now
	jrst owd
	pushj p,fwait
	idone!iend

	pushj p,inpsom
	jrst ilp

inpsom:	aos ninps#
	coni imp,1
	skipge blkip
	jrst ublki
	datai imp,leader#
	move 2,[iowd 300,messag]
	movem 2,blkip
inptst:	trnn 1,iend
	popj p,
	setzm blkip
	move 1,leader
	came 1,[5B7!13B15]
	consz imp,test
	setom now
inpc:	cono imp,strin!i32!o32!clrst!clrwt!idpien!iepien
	cono imp,clrst!clrwt
	popj p,

ublki:	blki imp,blkip
	jfcl
	jrst inptst
illans:	pushj p,rdlf
	outstr [asciz /Illegal reply
/]
	outstr [typmes:	asciz /Type "Y" for "Yes", "N" for "No",
and <CR> for "no change"
/]
	popj p,

rdlf:	inchwl 1
	caie 1,12
	jrst rdlf
	popj p,


main:	move p,[iowd mpln,mpdl]
	outstr typmes
	movei 1,[asciz /IN test mode
/]
	move 2,owd
	trnn 2,test
	movei 1,[asciz /NOT in test mode
/]
	outstr (1)
tml:	outstr [asciz /Test mode?	/]
tlp:	inchwl 1
	cain 1,15
	jrst tlp
	caie 1,"y"
	cain 1,"Y"
	jrst setst
	caie 1,"n"
	cain 1,"N"
	jrst notst
	cain 1,12
	jrst notch
	pushj p,illans
	jrst tml

setst:	pushj p,rdlf
	movei 1,test
	orm 1,owd
	orm 1,cno1
	orm 1,inpc
	setom rst#
	jrst notch

notst:	pushj p,rdlf
	movei 1,test
	andcam 1,owd
	andcam 1,cno1
	andcam 1,inpc
	setom rst
notch:	movei 1,[asciz /IMODE is 36-bit
/]
	move 2,owd
	trne 2,i32
	movei 1,[asciz /IMODE is 32-bit
/]
	outstr (1)
outs:	outstr [asciz /IMODE 36-bit?	/]
outl:	inchwl 1
	cain 1,15
	jrst outl
	caie 1,"y"
	cain 1,"Y"
	jrst seti36
	caie 1,"n"
	cain 1,"N"
	jrst seti32
	cain 1,12
	jrst noich
	pushj p,illans
	jrst outs

seti36:	pushj p,rdlf
	movei 1,i32
	andcam 1,owd
	andcam 1,inpc
	setom rst
	jrst noich

seti32:	pushj p,rdlf
	movei 1,i32
	orm 1,owd
	orm 1,inpc
	setom rst
noich:	movei 1,[asciz /OMODE is 36-bit
/]
	move 2,owd
	trne 2,o32
	movei 1,[asciz /OMODE is 32-bit
/]
	outstr (1)
ons:	outstr [asciz /OMODE 36-bit?	/]
onl:	inchwl 1
	cain 1,15
	jrst onl
	caie 1,"y"
	cain 1,"Y"
	jrst seto36
	caie 1,"n"
	cain 1,"N"
	jrst seto32
	cain 1,12
	jrst nooch
	pushj p,illans
	jrst ons

seto36:	pushj p,rdlf
	movei 1,o32
	andcam 1,owd
	setom rst
	jrst nooch

seto32:	pushj p,rdlf
	movei 1,o32
	orm 1,owd
	setom rst
nooch:	jrst main

end start